package com.example.customdemo;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.Nullable;


public class MyView extends View {
    //如果控件仅在java代码中通过new的方式创建，并通过ViewGroup.addView()添加时重写
    public MyView(Context context) {
        super(context);
    }
    //控件需要通过xml布局文件中配置时重写
    //AttributeSet即控件在xml布局中的属性及属性值
    public MyView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }
    //当控件使用style风格时使用
    public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
    //当控件不仅在xml中使用，同时使用style风格，并且支持style的xml配置时使用
    @SuppressLint("NewApi")
    public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr,defStyleRes);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        //设置控件wrap_content的最小尺寸   实际应用时 wrap_content应根据控件的显示内容动态计算
        int minWidth=100;
        int minHeight=100;
        //当高度和宽度同时为warp_content,则设置控件的最小宽高
        if(getLayoutParams().height== ViewGroup.LayoutParams.WRAP_CONTENT
        &&getLayoutParams().width== ViewGroup.LayoutParams.WRAP_CONTENT){
            setMeasuredDimension(minWidth,minHeight);
            //高度为wrap_content时，宽度为其他值
        }else if(getLayoutParams().height== ViewGroup.LayoutParams.WRAP_CONTENT){
            setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec),minHeight);
        }else if(getLayoutParams().width== ViewGroup.LayoutParams.WRAP_CONTENT){
            setMeasuredDimension(MeasureSpec.getSize(heightMeasureSpec),minWidth);
        }
    }

    //draw绘制过程的回调方法
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //画笔
        Paint paint=new Paint();
        //设置画笔颜色
        paint.setColor(getResources().getColor(R.color.purple_700));
        //paint.setColor(Color.parseColor("#FF3700B3"));

        //设置padding内边距在onDraw()方法内
        //设置margin外边距在layout()方法内
        int paddingLeft=getPaddingLeft();
        int paddingRight=getPaddingRight();
        int paddingTop=getPaddingTop();
        int paddingBottom=getPaddingBottom();



        int width=getWidth()-paddingLeft-paddingRight;
        int height=getHeight()-paddingBottom-paddingTop;
        int r=Math.min(width,height)/2;
        //参数1 参数2  圆心坐标   参数3 圆的半径 参数4 paint对象
        canvas.drawCircle((float)getWidth()/2,(float)getHeight()/2,r,paint);
    }

}
